<HTML>
<HEAD>

<TITLE>Oculus VR, Inc.</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="RaknetManual.css" rel="stylesheet" type="text/css">
</HEAD>
<link href="RaknetManual.css" rel="stylesheet" type="text/css">
<meta name="title" content="RakNet - Advanced multiplayer game networking API">
</HEAD>
<BODY BGCOLOR="#ffffff" LINK="#003399" vlink="#003399" alink="#003399" LEFTMARGIN="0" TOPMARGIN="0" MARGINWIDTH="0" MARGINHEIGHT="0"">
<img src="RakNet_Icon_Final-copy.jpg" alt="Oculus VR, Inc." width="150" height="150"><BR>
<BR>

<table width="100%" border="0"><tr>
  <td bgcolor="2c5d92"><font color="#FFFFFF" size="3" face="Arial, Helvetica, sans-serif" class="RakNetWhiteHeader"><span class="RakNetWhiteHeader">&nbsp;Introduction</span></td>
</tr></table>
<TABLE BORDER="0" CELLPADDING="10" CELLSPACING="0" WIDTH="100%"><TR>
  <TD>  <p><span class="RakNetBlueHeader">Manual Last Updated
    11/19/2012.  See readme.txt for the current version number.</span></p>
    <p>RakNet is a high-performance network API designed for games or other high-performance network applications. RakNet is intended to provide most to all features modern games need, such as a master server, autopatcher, voice chat, and cross-platform capabilities. RakNet currently supports Windows, PlayStation 3, XBOX 360, PlayStation Vita, Linux, Mac, the iPhone, Android, and Windows Phone 8.</p></TD>
</TR></TABLE>
<table width="100%" border="0"><tr><td bgcolor="2c5d92">&nbsp;<span class="RakNetWhiteHeader">Quick Start</span></td>
</tr></table>
<TABLE BORDER="0" CELLPADDING="10" CELLSPACING="0" WIDTH="100%"><TR>
  <TD><p><A HREF="multiplayergamecomponents.html">Components of a multiplayer game</A><BR>
      <A HREF="systemoverview.html">System Overview</A><BR>
      <A HREF="detailedimplementation.html">Detailed Implementation</A><BR>
      <A HREF="tutorial.html">Tutorial</A><BR>
      <A HREF="compilersetup.html">Compiler Setup (Visual Studio)</A><BR>
      <A HREF="compilersetup_xcode.html">Compiler Setup (XCode)</A><BR>
      <A HREF="dependencies.html">Optional 3rd party dependencies</A><br>
      <a href="http://www.jenkinssoftware.com/forum/index.php?topic=584.0">HowTo</a><BR>
    </p></TD></TR></TABLE>

<table width="100%" border="0"><tr>
  <td bgcolor="2c5d92" class="RakNetWhiteHeader">&nbsp;Training Videos</td>
</tr>
</table>
<TABLE BORDER="0" CELLPADDING="10" CELLSPACING="0" WIDTH="100%"><TR>
  <TD><p><A HREF="http://www.youtube.com/watch?v=sez3o00uCqU">Introduction:Major Features</A><br>
      <A HREF="http://www.jenkinssoftware.com/raknet/manual/RPC3Video.htm">Tutorial 1: RPC3</A><BR>
    <A HREF="http://www.jenkinssoftware.com/raknet/manual/ReplicaManager3Video.htm">Tutorial 2: ReplicaManager3</A><BR>
    <A HREF="http://www.jenkinssoftware.com/raknet/manual/AutopatcherVideo.htm">Tutorial 3: Autopatcher</A><BR>
    <A HREF="http://www.youtube.com/watch?v=w4OUGeLKcss">Tutorial 4: A complete sample covering object replication, teams, player hosted rooms and lobbies, NAT traversal, and host migration</A><br>
    </p></TD></TR></TABLE>
    <table width="100%" border="0"><tr>
  <td bgcolor="2c5d92" class="RakNetWhiteHeader">&nbsp;Feature Videos</td>
</tr>
</table>
<TABLE BORDER="0" CELLPADDING="10" CELLSPACING="0" WIDTH="100%"><TR>
  <TD><p><A HREF="http://www.jenkinssoftware.com/raknet/manual/SQLite3LoggerPluginVideo.html">Networked logging with SQLiteClientLoggerPlugin</A><br>
  </p></TD></TR></TABLE>
<table width="100%" border="0"><tr><td bgcolor="2c5d92">
<img src="spacer.gif" width="8" height="1"><span class="RakNetWhiteHeader">The Basics</span></td>
</tr></table>
<TABLE BORDER="0" CELLPADDING="10" CELLSPACING="0" WIDTH="100%"><TR><TD>
  <p><a href="startup.html">Startup</a> <BR>
- Starting up RakPeerInterface, and the thread sleep timer explained</p>
  <p><a href="connecting.html">Connecting</a> <BR>
    - How to find and connect to other systems, and what to do if there are problems  </p>
  <p><A HREF="creatingpackets.html">Creating Packets</A><BR>
- How to create custom packets using structures and bitstreams, and how to encode timestamps.<BR>
<BR>
<A HREF="sendingpackets.html">Sending Packets</A><BR>
- How to send packets already prepared, and what parameters to use.<BR>
<BR>
<A HREF="receivingpackets.html">Receiving Packets</A><BR>
- How to converting raw data back to a packet you can read via a structure or bitstream.</p>
  <p><A HREF="systemaddresses.html">SystemAddress</A><BR>
    - Describes the purpose and use of the SystemAddress structure used in packets and in some function parameters.</p>
  <p><A HREF="bitstreams.html">Bitstreams</A><BR>
    - An overview of RakNet's bitstream class, used throughout the API.</p>
  <p><A HREF="reliabilitytypes.html">Reliability types</A><BR>
- Covers parameters you can use to control how data gets sent.</p>
  <p><A HREF="networkmessages.html">Network Messages</A><BR>
- Gives an overview of the messages the API will send to the user.  This is also listed in MessageIdentifiers.h.
  <p><A HREF="timestamping.html">Timestamping your packets</A><BR>
- Covers the purpose of timestamps.<BR>
<BR>
    <A HREF="networkidobject.html">NetworkIDObject</A><BR>
- A Utility class to give each class instance a unique identifier that all systems can share.</p>
  <p><A HREF="statistics.html">Statistics</A><BR>
- The statistics that RakNet provides.<BR>
<BR>
<A HREF="secureconnections.html">Secure connections</A><BR>
- How to activate and use secure connections.</p>
  <p><a href="http://masterserver2.raknet.com/">Master server</a><br>
    - Our hosted master server service, to find other games on the internet.
  </p>
  <p><a href="cloudhosting.html">Cloud hosting</a><br>
- Setting up RakNet with cloud-hosted services</p>
  <p><a href="rackspaceinterface.html">Rackspace interface</a><br>
    - C++ interface to Rackspace, allowing you to programatically create, delete, reboot, image, and perform other operations on servers.</p>
  <p><a href="nattraversalarchitecture.html">NAT traversal architecture</a><br>
    - How to use combine UPNP, NAT type detection, NAT punchthrough, and Router2 so P2P connections complete quickly and efficiently.<BR>
    <BR>
    <A HREF="preprocessordirectives.html">Preprocessor Directives</A><BR>
    - Enables you to rebuild the library with different code settings.</p>
  <p><A HREF="custommemorymanagement.html">Custom Memory Management</A><BR>
    - For consoles, memory tracking, etc.</p>
  <p><a href="ipv6support.html">IPV6 support</a><br>
    - The next-generation IP address
  format.</p>
  <p><a href="marmalade.html">Marmalade integration</a><br>
    - Integration with the Marmalade SDK for the IOS and Android platforms.</p></TD></TR></TABLE>
<table width="100%" border="0"><tr><td bgcolor="#2c5d92"><font color="#FFFFFF" size="3" face="Arial, Helvetica, sans-serif"><strong><span class="RakNetWhiteHeader">&nbsp;Plugins</span></strong></td>
</tr></table>
<TABLE BORDER="0" CELLPADDING="10" CELLSPACING="0" WIDTH="100%"><TR><TD>

<A HREF="plugininterface.html">Plugin Interface 2</A><BR>
    - The base class of all plugins<BR>

<p><A HREF="autopatcher.html">Autopatcher</A><BR>
- Overview of the autopatcher included with RakNet.</p>
<p><a href="RPC3Video.htm">RPC3</a><br>
- Call C and C++ functions with native parameter lists, using Boost for additional functionality.</p>
<p><a href="rpc4.html">RPC4</a><br>
- Call C functions, no external dependencies.</p>
<p><A HREF="connectiongraph.html">Connection Graph</A><BR>
  - A plugin-in that maintains a graph of the entire network.</p>
<p><a href="directorydeltatransfer.html">Directory Delta Transfer</a><br>
  - Send changed or missing files between directories.  In essence, a simple autopatcher that can be used for transmitting levels, skins, etc.<br>
  <br>
  <a href="filelisttransfer.html">File List Transfer</a><br>
  - Plugin to send a list of files, encoded in the FileList structure<br>
  <br>
  <A HREF="fullyconnectedmesh2.html">Fully Connected Mesh 2</A><BR>
- A plug-in for peer to peer games, for host determination and verified connectivity to the mesh.</p>
<p><a href="lobby.html">Lobby2Client - PC</a><br>
  - PostgreSQL backed database for game data, including users, friends, clans, messages
</p>
<p><a href="steamlobby.html">Lobby2Client - Steam</a><br>
- Steamworks powered backend, using the Lobby2 interface.</p>
<p><a href="ps3lobby.html">Lobby2Client - PS3<br>
</a>- PS3 NP backend, using the  Lobby2 interface.</p>
<p><a href="xbox360lobby.html">Lobby2Client - XBOX 360</a><br>
  - LIVE backend and voice chat support, using the Lobby2 interface with support for RakVoiceXBOX360Plugin and FullyConnectedMesh2</p>
<p><a href="gfwllobby.html">Lobby2Client - Games for Windows Live</a><br>
  - Same as XBOX 360 backend but runs on Windows</p>
<p><a href="messagefilter.html">Message Filter</a><br>
  - Prevent unwanted network messages based on sender for added security.</p>
<p><A HREF="nattypedetection.html">NAT type detection</A><BR>
  - Find out what kind of NAT you are behind to keep users that will probably not be able to connect separate</p>
<p><A HREF="natpunchthrough.html">NAT punchthrough</A><BR>
  - Connect users behind NAT. Required for peer to peer, voice communication, or to allow players to host their own servers.</p>
<p><a href="packetlogger.html">Packet Logger</a><br>
- Print network traffic to the screen, file, or elsewhere.</p>
<p><A HREF="rakvoice.html">RakVoice</A><BR>
  - Overview of RakVoice.  Refer to RakVoice.h for full implementation and function details. </p>
<p><a href="readyevent.html">Ready Event</a><br>
  - Synchronize when a group of systems are all ready on a common identifier, useful in peer to peer enviroments to start games at the same time, or progress turns in a turn based game.</p>
<p><A HREF="replicamanager3.html">Replica Manager 3</A><BR>
  - A plug-in that provides management for your game objects and players to make serialization, scoping, and object creation and destruction easier.<BR>
  <BR>
  <a href="router.html">Router2</a><br>
  - Send network messages to one or more remote systems we are not directly connected to<br>
  <br>
  <a href="sqlite3loggerplugin.html">SQLite3LoggerPlugin</a><br>
- Create networked log files using SQLite. Based on <a href="sqlite3plugin.html">SQLite3Plugin</a></p>
<p><a href="sqlite3plugin.html">SQLite3Plugin</a><br>
  - Execute statements over the network with SQLite (replacement for LightweightDatabase)</p>
<p><a href="teammanager.html">TeamManager</a><br>
- Manages lists of teams and team members. Supports client/server and peer to peer</p>
<p><a href="twowayauthentication.html">TwoWayAuthentication</a><br>
  - Implements <a href="http://en.wikipedia.org/wiki/Mutual_authentication">Two Way Authentication</a>, validating a predesignated password without transmitting the password. </p></TD></TR></TABLE>

<table width="100%" border="0"><tr>
  <td bgcolor="#2c5d92">&nbsp;<strong><span class="RakNetWhiteHeader">C# and SWIG</span></strong></td>
</tr></table>
<TABLE BORDER="0" CELLPADDING="10" CELLSPACING="0" WIDTH="100%"><TR><TD>
<p><a href="swigtutorial.html">Swig Tutorial</a><br>
      - How to run RakNet from C# using SWIG and possibly Mono.</p>
<p><a href="csharpunity.html">Unity Integration</a><br>
- How RakNet is used with Unity, and how to upgrade to version 4.x</p>
</TD></TR></TABLE>

<table width="100%" border="0"><tr>
  <td bgcolor="#2c5d92">&nbsp;<strong><span class="RakNetWhiteHeader">Utilities</span></strong></td>
</tr></table>
<TABLE BORDER="0" CELLPADDING="10" CELLSPACING="0" WIDTH="100%"><TR><TD>
    
    <p><a href="crashreporter.html">Crash Reporter</a><br>
      - Sends mini-dumps when your application crashes, writing to disk and/or sending an email.</p>
    <p><a href="consoleserver.html">Console Server</a><br>
      - Text based backdoor to a server using either secure RakNet or telnet, allowing execution of predesignated commands or arbitrary command strings.</p>
    <p><a href="emailsender.html">Email Sender</a><br>
      - Used by the crash reporter to send emails via TCP</p>
    <p><a href="stringcompressor.html">String Compressor / String Table</a><br>
      - Used to encode strings with less bandwidth and more security.
    <p><a href="tcpinterface.html">TCP Interface</a><br>
    - Wrapper class for TCP connections</p>
    </TD></TR></TABLE>
<table width="100%" border="0"><tr>
  <td bgcolor="#2c5d92"><font color="#FFFFFF" size="3" face="Arial, Helvetica, sans-serif"><strong><span class="RakNetWhiteHeader">&nbsp;3D Demos</span></strong></td>
</tr></table>
<TABLE BORDER="0" CELLPADDING="10" CELLSPACING="0" WIDTH="100%"><TR><TD>
    
    <p><a href="ogre3dinterpdemo.html">Ogre 3D Interpolation Demo</a><br>
      - Use <A HREF="http://www.ogre3d.org/">Ogre 3D</A> to show a demo of popping popcorn over a client/server network, using <a href="replicamanager3.html">ReplicaManager3</a></p>
          <p><a href="irrlichtfpsdemo.html">Irrlicht FPS Demo</a><br>
      - Use <A HREF="http://irrlicht.sourceforge.net/">Irrlicht</A> to show a 3D FPS demo using peer to peer with NAT punchthrough. Also uses <a href="replicamanager3.html">ReplicaManager3</a></p>
    </TD></TR></TABLE>
        
    <table width="100%" border="0"><tr>
  <td bgcolor="#2c5d92"><font color="#FFFFFF" size="3" face="Arial, Helvetica, sans-serif"><strong><span class="RakNetWhiteHeader">&nbsp;Technical Design Documents</span></strong></td>
</tr></table>
<TABLE BORDER="0" CELLPADDING="10" CELLSPACING="0" WIDTH="100%"><TR>
  <TD>
  	<a href="RakNetUML.jpg">UML Diagram</a><BR>
  	<a href="bluetooth.html">Potential Bluetooth support</a>
  	
    </TD></TR></TABLE>
        
<table width="100%" border="0"><tr><td bgcolor="#2c5d92"><font color="#FFFFFF" size="3" face="Arial, Helvetica, sans-serif"><strong><span class="RakNetWhiteHeader">&nbsp;Data Structures</span></strong></td>
</tr></table>
<TABLE BORDER="0" CELLPADDING="10" CELLSPACING="0" WIDTH="100%"><TR><TD>

    <p>DS_BinarySearchTree.h - <a href="http://en.wikipedia.org/wiki/Binary_search_tree">Binary search tree</a>, and an <a href="http://en.wikipedia.org/wiki/AVL_tree">AVL balanced</a> binary search tree.<br>
      DS_BPlusTree.h - <a href="http://en.wikipedia.org/wiki/B%2B_tree">BPlus tree</a> for fast lookup, delete, and insert.<br>
      DS_BytePool.h - Returns data blocks at certain size thresholds to reduce memory fragmentation.<br>
      DS_ByteQueue.h - A queue specialized for reading and writing bytes.<br>
      DS_Heap.h - <a href="http://en.wikipedia.org/wiki/Heap_%28data_structure%29">Heap data structure</a>, includes both minheap and maxheap.<br>
      DS_HuffmanEncodingTree.h - <a href="http://en.wikipedia.org/wiki/Huffman_coding">Huffman encoding tree</a>, used to find the minimal bitwise representation given a frequency table.<br>
      DS_HuffmanEncodingTreeFactory.h - Creates instances of the Huffman encoding tree.<br>
      DS_HuffmanEncodingTreeNode.h - Node in the Huffman encoding tree.<br>
      DS_LinkedList.h - Standard <a href="http://en.wikipedia.org/wiki/Linked_list">linked list</a>.<br>
      DS_List.h - Dynamic <a href="http://en.wikipedia.org/wiki/Array">array</a> (sometimes improperly called a vector). Also doubles as a <a href="http://en.wikipedia.org/wiki/Stack_%28data_structure%29">stack</a>.<br>
      DS_Map.h - (<a href="http://en.wikipedia.org/wiki/Associative_array">Associative array</a>) Ordered list with an per-element sort key.<br>
      DS_MemoryPool.h - Allocate and free reused instances of a fixed size structure, used to reduce memory fragmentation.<BR>
      DS_Multilist_h - (Added 4/8/2009) Combines a list, stack, queue, and ordered list into one class with a common interface.<BR>
      DS_OrderedChannelHeap.h - Maxheap which returns a node based on the relative weight of the node's associated channel. Used for task scheduling with priorities.<br>
      DS_OrderedList.h - List ordered by an arbitrary key via <a href="http://en.wikipedia.org/wiki/Quicksort">quicksort</a>.<br>
      DS_Queue.h - Standard <a href="http://en.wikipedia.org/wiki/Queue_%28data_structure%29">queue</a> implemented with an array<br>
      DS_QueueLinkedList.h - Standard queue implemented with a <a href="http://en.wikipedia.org/wiki/Linked_list">linked list</a><br>
      DS_RangeList.h - Stores a list of numerical values, and when the values are sequential, represents them as a range rather than individual elements. Useful when storing many values that are usually sequential.<br>
      DS_Table.h - <a href="http://en.wikipedia.org/wiki/Table_%28database%29">Table</a> with columns and rows, and operations on that table.<br>
      DS_Tree.h - Noncyclic <a href="http://en.wikipedia.org/wiki/Graph_%28data_structure%29">graph</a><br>
      DS_WeightedGraph.h - Graph with weighted edges, used for routing via <a href="http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm">Dijkstra's algorithm</a><br>
      RakString - String implementation, up to 4.5 times faster than std::string</p></TD>
</TR></TABLE>
<table width="100%" border="0"><tr><td bgcolor="#2c5d92" class="RakNetWhiteHeader"><font color="#FFFFFF" size="3" face="Arial, Helvetica, sans-serif" class="RakNetWhiteHeader">&nbsp;Support</td>
</tr></table>
<TABLE BORDER="0" CELLPADDING="10" CELLSPACING="0" WIDTH="100%"><TR><TD>

<A HREF="faq.html">FAQ</A><br>
<a href="debuggingdisconnects.html">Debugging Disconnections</a><BR>
<A HREF="programmingtips.html">Programming Tips</A><BR>
<A HREF="revisionlog.html">Revision Log</A><BR>

</TD></TR></TABLE>
</BODY>
</HTML>